#pragma once
#include <iostream>
#include <sys/stat.h>
#include "Comm.hpp"

class Init
{
public:
    Init()
    {
        umask(0);
        int n = mkfifo(gpipeFile.c_str(),gmode);
        if(n<0)
        {
            std::cerr<<"mkfifo error"<<std::endl;
            return;
        }
        std::cout<<"mkfifo success"<<std::endl;


    }
    ~Init()
    {
        int n = unlink(gpipeFile.c_str());
        if(n<0)
        {
            std::cerr<<"unlink error"<<std::endl;
            return;
        }
        std::cout<<"unlink success"<<std::endl;
    }
private:
};

Init init;

class Server
{
public:
    Server():_fd(gdefaultfd)
    {
        
    }
    bool OpenPipeForRead()
    {
        _fd = OpenPipe(gForRead);
        if(_fd<0)
            return false;
        return true;
    }
    int RecivePipe(std::string* out)
    {
        char buffer[1024];
        size_t n = read(_fd,buffer,sizeof(buffer)-1);
        if(n>0)
        {
            buffer[n] = 0;
            *out = buffer;
        }
        return n;

    }
    void ClosePipe()
    {
        ClosePipeHelper(_fd);
    }
private:
    int _fd;
};